<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  
  	<s:debug></s:debug><br>
	<!-- 创建 url 会自动将其放入域对象中 -->
	<s:url value="/getProduct" var="url1">
		<s:param name="prodcutId" value="1000"></s:param>
	</s:url>
	${url1}<br>
	
	<!-- 使用单引号使 value 内的值不被 OGNL 解析 -->
	<s:url value="/getProduct" var="url2">
		<s:param name="productId" value="'productId'"></s:param>
	</s:url>
	${url2}<br>
	
	<!-- 创建一个 action 请求的 url -->
	<s:url action="testAction" namespace="/test" method="execute" var="url3"></s:url>
	${url3}<br>
	
	<!-- index.jsp 中提交表单 method 为 post, includeParams 为 get 时, url 不包含参数信息 -->
	<s:url value="testUrl" var="url5" includeParams="get"></s:url>
	${url5}<br>
	
	<!-- 当 includeParams 为 all 时, url 包含参数信息 -->
	<s:url value="testUrl" var="url6" includeParams="all"></s:url>
	${url6}<br>
	
	<!-- 向域对象(page,request,session,application)中加入一个属性值 -->
	<!-- 会对 value 属性值进行自动的 ognl 解析  -->
	<s:set var="productName" value="productValue" scope="request"></s:set>
	productName:${requestScope.productName }<br>
	
	<!-- 把一个对象在标签开始时压入栈中, 标签结束时弹出 -->
	<jsp:useBean id="person" class="struts_tag.Person" scope="request"></jsp:useBean>
	<jsp:setProperty property="id" name="person" value="1000"/>
	<jsp:setProperty property="name" name="person" value="张三"/>
	<s:push value="#request.person">
		beforePopName:${name }<br>
	</s:push>
	afterPopName:${name }<br>
	
	<!-- test 值可为 OGNL 表达式 -->
	<s:if test="productPrice > 1000">niubility</s:if><br>
	<s:elseif test="productDesc == 'Inter'">臭**挤牙膏的</s:elseif>
	<s:else>else</s:else>
	
	<!-- 遍历集合 会在标签开始时把集合中每一个元素依次压入值栈, 并在标签结束时弹出值栈 -->
	<!-- value 可以是存放在域对象里的集合, 也可以是在对象栈中 -->
	<s:iterator value="#request.list" status="status">
		id:${requestScope.id }&nbsp;name:${name }&nbsp;
		statusIndex:${status.index }&nbsp;statusCount:${status.count }<br>
	</s:iterator>
	
	<!-- s:sort 可以对集合中的元素进行排序 -->
	<!-- list2 将会以 key 的形式被放到域对象中, 对应的 value 为已经按照 comparator 排序好的集合 -->
	<s:sort comparator="#request.comparator" source="#request.list" var="list2"></s:sort>
	<s:iterator value="#attr.list2">
		AfterSortId:${requestScope.id }&nbsp;AfterSortName:${requestScope.name }<br>
	</s:iterator>
	
	<!-- s:date 可以对 date 对象进行排版 -->
	<s:date name="#request.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/>
	date:${date2 }<br>
	
	<!-- s:a 可以对 ognl 表达式进行解析, 解析时要把要解析内容用"%{ }"包起来 -->
	<!-- 指针悬停在超链接时, 会显示超链接内容 -->
	<h3><s:a href="getProductName.action?productName=%{productName}">s:aTagTest@uncheck-404</s:a></h3>
	
  </body>
</html>
